diff --git a/system/database/DB_driver.php b/system/database/DB_driver.php
index 94db84b..275d51c 100644
--- a/system/database/DB_driver.php
+++ b/system/database/DB_driver.php
@@ -45,6 +45,7 @@
 	var $query_count	= 0;
 	var $bind_marker	= '?';
 	var $queries		= array();
+	var $cache			= array();
 	var $trans_enabled	= TRUE;
 	var $_trans_depth	= 0;
 	var $_trans_failure	= FALSE; // Used with transactions to determine if a rollback should occur
@@ -563,6 +564,12 @@
 	 */
     function field_names($table = '')
     {
+		// Is there a cached result?
+		if (isset($this->cache['field_names'][$table]))
+		{
+			return $this->cache['field_names'][$table];
+		}
+    
     	if ($table == '')
     	{
 			if ($this->db_debug)
@@ -596,7 +603,7 @@
 			}    	
 		}
     	
-    	return $retval;
+		return $this->cache['field_names'][$table] =& $retval;
     }
 	
 	// --------------------------------------------------------------------
diff --git a/system/database/DB_export.php b/system/database/DB_export.php
deleted file mode 100644
index 1704f0d..0000000
--- a/system/database/DB_export.php
+++ /dev/null
@@ -1,132 +0,0 @@
-<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');
-/**
- * Code Igniter
- *
- * An open source application development framework for PHP 4.3.2 or newer
- *
- * @package		CodeIgniter
- * @author		Rick Ellis
- * @copyright	Copyright (c) 2006, pMachine, Inc.
- * @license		http://www.codeignitor.com/user_guide/license.html 
- * @link		http://www.codeigniter.com
- * @since		Version 1.0
- * @filesource
- */
-
-// ------------------------------------------------------------------------
-
-/**
- * DB Exporting Class
- *
- * @category	Database
- * @author		Rick Ellis
- * @link		http://www.codeigniter.com/user_guide/database/
- */
-class CI_DB_export {
-
-
-	/**
-	 * Constructor.  Simply calls the log function 
-	 */	
-	function CI_DB_export()
-	{
-		log_message('debug', "Database Export Class Initialized");
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
-	 * Generate CVS from a query result object
-	 *
-	 * @access	public
-	 * @param	object	The query result object
-	 * @param	string	The delimiter - tab by default
-	 * @param	string	The newline character - \n by default
-	 * @return	string
-	 */
-	function cvs_from_result($query, $delim = "\t", $newline = "\n")
-	{
-		if ( ! is_object($query) OR ! method_exists($query, 'field_names'))
-		{
-			show_error('You must submit a valid result object');
-		}	
-	
-		$out = '';
-		
-		// First generate the headings from the table column names
-		foreach ($query->field_names() as $name)
-		{
-			$out .= $name.$delim;
-		}
-		
-		$out = rtrim($out);
-		$out .= $newline;
-		
-		// Next blast through the result array and build out the rows
-		foreach ($query->result_array() as $row)
-		{
-			foreach ($row as $item)
-			{
-				$out .= $item.$delim;			
-			}
-			$out = rtrim($out);
-			$out .= $newline;
-		}
-
-		return $out;
-	}
-	
-	// --------------------------------------------------------------------
-
-
-	/**
-	 * Generate XML data from a query result object
-	 *
-	 * @access	public
-	 * @param	object	The query result object
-	 * @param	array	Any preferences
-	 * @return	string
-	 */
-	function xml_from_result($query, $params = array())
-	{
-		if ( ! is_object($query) OR ! method_exists($query, 'field_names'))
-		{
-			show_error('You must submit a valid result object');
-		}
-		
-		// Set our default values
-		foreach (array('root' => 'root', 'element' => 'element', 'newline' => "\n", 'tab' => "\t") as $key => $val)
-		{
-			if ( ! isset($params[$key]))
-			{
-				$params[$key] = $val;
-			}
-		}
-		
-		// Create variables for convenience
-		extract($params);
-			
-		// Load the xml helper
-		$obj =& get_instance();
-		$obj->load->helper('xml');
-
-		// Generate the result
-		$xml = "<{$root}/>".$newline;
-		foreach ($query->result_array() as $row)
-		{
-			$xml .= $tab."<{$element}/>".$newline;
-			
-			foreach ($row as $key => $val)
-			{
-				$xml .= $tab.$tab."<{$key}>".xml_convert($val)."</{$key}>".$newline;
-			}
-			$xml .= $tab."</{$element}>".$newline;
-		}
-		$xml .= "</$root>".$newline;  
-		
-		return $xml;
-	}
-
-}
-
-?>
\ No newline at end of file
diff --git a/system/database/DB_utility.php b/system/database/DB_utility.php
index 764f10c..ff9407e 100644
--- a/system/database/DB_utility.php
+++ b/system/database/DB_utility.php
@@ -25,6 +25,7 @@
 class CI_DB_utility {
 
 	var $db;
+	var $cache = array();
 
 	/**
 	 * Constructor
@@ -93,6 +94,12 @@
 	 */
 	function list_databases()
 	{	
+		// Is there a cached result?
+		if (isset($this->cache['db_names']))
+		{
+			return $this->cache['db_names'];
+		}
+	
 		$query = $this->db->query($this->_list_database());
 		$dbs = array();
 		if ($query->num_rows() > 0)
@@ -103,7 +110,7 @@
 			}
 		}
 			
-		return $dbs;
+		return $this->cache['db_names'] =& $dbs;
 	}
 
 	// --------------------------------------------------------------------
@@ -116,6 +123,12 @@
 	 */	
 	function list_tables()
 	{
+		// Is there a cached result?
+		if (isset($this->cache['table_names']))
+		{
+			return $this->cache['table_names'];
+		}
+	
 		if (FALSE === ($sql = $this->_list_tables()))
 		{
             if ($this->db->db_debug)
@@ -143,7 +156,7 @@
 			}
 		}
 
-		return $retval;
+		return $this->cache['table_names'] =& $retval;
 	}
 	
 	// --------------------------------------------------------------------
@@ -258,7 +271,111 @@
 		return $this->db->query($sql);
 	}
 
+	// --------------------------------------------------------------------
 
+	/**
+	 * Generate CVS from a query result object
+	 *
+	 * @access	public
+	 * @param	object	The query result object
+	 * @param	string	The delimiter - tab by default
+	 * @param	string	The newline character - \n by default
+	 * @return	string
+	 */
+	function cvs_from_result($query, $delim = "\t", $newline = "\n")
+	{
+		if ( ! is_object($query) OR ! method_exists($query, 'field_names'))
+		{
+			show_error('You must submit a valid result object');
+		}	
+	
+		$out = '';
+		
+		// First generate the headings from the table column names
+		foreach ($query->field_names() as $name)
+		{
+			$out .= $name.$delim;
+		}
+		
+		$out = rtrim($out);
+		$out .= $newline;
+		
+		// Next blast through the result array and build out the rows
+		foreach ($query->result_array() as $row)
+		{
+			foreach ($row as $item)
+			{
+				$out .= $item.$delim;			
+			}
+			$out = rtrim($out);
+			$out .= $newline;
+		}
+
+		return $out;
+	}
+	
+	// --------------------------------------------------------------------
+
+	/**
+	 * Generate XML data from a query result object
+	 *
+	 * @access	public
+	 * @param	object	The query result object
+	 * @param	array	Any preferences
+	 * @return	string
+	 */
+	function xml_from_result($query, $params = array())
+	{
+		if ( ! is_object($query) OR ! method_exists($query, 'field_names'))
+		{
+			show_error('You must submit a valid result object');
+		}
+		
+		// Set our default values
+		foreach (array('root' => 'root', 'element' => 'element', 'newline' => "\n", 'tab' => "\t") as $key => $val)
+		{
+			if ( ! isset($params[$key]))
+			{
+				$params[$key] = $val;
+			}
+		}
+		
+		// Create variables for convenience
+		extract($params);
+			
+		// Load the xml helper
+		$obj =& get_instance();
+		$obj->load->helper('xml');
+
+		// Generate the result
+		$xml = "<{$root}/>".$newline;
+		foreach ($query->result_array() as $row)
+		{
+			$xml .= $tab."<{$element}/>".$newline;
+			
+			foreach ($row as $key => $val)
+			{
+				$xml .= $tab.$tab."<{$key}>".xml_convert($val)."</{$key}>".$newline;
+			}
+			$xml .= $tab."</{$element}>".$newline;
+		}
+		$xml .= "</$root>".$newline;  
+		
+		return $xml;
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Database Backup
+	 *
+	 * @access	public
+	 * @return	void
+	 */
+	function export()
+	{
+		// The individual driver overloads this method
+	}
 
 
 }
diff --git a/system/database/drivers/mysql/mysql_utility.php b/system/database/drivers/mysql/mysql_utility.php
index 65fb87f..f432993 100644
--- a/system/database/drivers/mysql/mysql_utility.php
+++ b/system/database/drivers/mysql/mysql_utility.php
@@ -128,19 +128,18 @@
 	/**
 	 * MySQL Export
 	 *
-	 * @access	public
-	 * @param	object	The query result object
+	 * @access	private
 	 * @param	array	Any preferences
-	 * @return	string
+	 * @return	mixed
 	 */
-	function export($params = array())
+	function _export($params = array())
 	{
 		// Set up our default preferences
 		$prefs = array(
 							'tables'		=> array(),
 							'ignore'		=> array(),
 							'format'		=> 'gzip',
-							'download'		=> TRUE,
+							'action'		=> 'download', // download, archive, echo, return
 							'filename'		=> date('Y-m-d-H:i', time()),
 							'filepath'		=> '',
 							'add_drop'		=> TRUE,
@@ -169,8 +168,6 @@
 			$tables = $this->list_tables();
 		}
 	
-	
-	
 		// Start buffering the output
 		ob_start();
 	
@@ -193,7 +190,6 @@
         	}
         	
         	// Write out the table schema
-      
             echo $newline.$newline.'#'.$newline.'# TABLE STRUCTURE FOR: '.$table.$newline.'#'.$newline.$newline;
                 
  			if ($add_drop == TRUE)
@@ -211,13 +207,13 @@
 			    }
 			}
 			
-			// Build the insert statements
-			
+			// If inserts are not needed we're done...
 			if ($add_insert == FALSE)
 			{
 				continue;
 			}
-			
+
+			// Grab all the data from the current table
 			$query = $this->db->query("SELECT * FROM $table");
 			
 			if ($query->num_rows() == 0)
@@ -225,37 +221,39 @@
 				continue;
 			}
 		
-			// Grab the field names and determine if the field is an
+			// Fetch the field names and determine if the field is an
 			// integer type.  We use this info to decide whether to 
 			// surround the data with quotes or not
 			
 			$i = 0;
-			$fields = '';
+			$field_str = '';
 			$is_int = array();
 			while ($field = mysql_fetch_field($query->result_id))
 			{
 				$is_int[$i] = (in_array(
-										mysql_field_type($query->result_id, $i), 
+										strtolower(mysql_field_type($query->result_id, $i)), 
 										array('tinyint', 'smallint', 'mediumint', 'int', 'bigint', 'timestamp'), 
 										TRUE)
 										) ? TRUE : FALSE;
 										
 				// Create a string of field names
-				$fields .= $field->name.', ';     
+				$field_str .= $field->name.', ';     
 				$i++;
 			}
-					
-			$fields = preg_replace( "/, $/" , "" , $fields);
+			
+			// Trim off the end comma
+			$field_str = preg_replace( "/, $/" , "" , $field_str);
 			
 			
-			// Build the inserts
+			// Build the insert string
 			foreach ($query->result_array() as $row)
 			{
-				$values = '';
+				$val_str = '';
 			
 				$i = 0;
 				foreach ($row as $v)
 				{
+					// Do a little formatting...
 					$v = str_replace(array("\x00", "\x0a", "\x0d", "\x1a"), array('\0', '\n', '\r', '\Z'), $v);   
 					$v = str_replace(array("\n", "\r", "\t"), array('\n', '\r', '\t'), $v);   
 					$v = str_replace('\\', '\\\\',	$v);
@@ -265,21 +263,21 @@
 					$v = str_replace('\\\t', '\t',	$v);
 				
 					// Escape the data if it's not an integer type
-					$values .= ($is_int[$i] == FALSE) ? $this->db->escape($v) : $v;
-					$values .= ', ';
+					$val_str .= ($is_int[$i] == FALSE) ? $this->db->escape($v) : $v;
+					$val_str .= ', ';
 					
 					$i++;
 				}
 				
-				$values = preg_replace( "/, $/" , "" , $values);
+				$val_str = preg_replace( "/, $/" , "" , $val_str);
 				
-				if ($download == FALSE)
+				if ($action == 'echo')
 				{
-					$values = htmlspecialchars($values);
+					$val_str = htmlspecialchars($val_str);
 				}
 				
 				// Build the INSERT string
-				echo 'INSERT INTO '.$table.' ('.$fields.') VALUES ('.$values.');'.$newline;
+				echo 'INSERT INTO '.$table.' ('.$field_str.') VALUES ('.$val_str.');'.$newline;
 	
 			}
 			
diff --git a/system/libraries/Controller.php b/system/libraries/Controller.php
index be66b19..51f4550 100644
--- a/system/libraries/Controller.php
+++ b/system/libraries/Controller.php
@@ -189,8 +189,6 @@
 		}
 		
 		$remap = array(
-						'DB_export'		=> 'dbexport',
-						'DB_utility'	=> 'dbutility',
 						'Unit_test' 	=> 'unit'
 						);
 						
@@ -516,19 +514,15 @@
 	{
 		if ( ! $this->_ci_is_loaded('db'))
 		{
-			$this->_init_database();
+			$this->_ci_init_database();
 		}
 			
 		if ($class == 'dbutil')
 		{
 			require_once(BASEPATH.'database/DB_utility'.EXT);
 			require_once(BASEPATH.'database/drivers/'.$this->db->dbdriver.'/'.$this->db->dbdriver.'_utility'.EXT);
-			$this->init_class('CI_DB_'.$this->db->dbdriver.'_utility', 'dbutil');
-		}
-		elseif ($class == 'dbexport')
-		{
-			require_once(BASEPATH.'database/DB_export'.EXT);
-			$this->init_class('CI_DB_export', 'dbexport');
+			$class = 'CI_DB_'.$this->db->dbdriver.'_utility';
+			$this->dbutil = new $class();
 		}
 	}
 
diff --git a/system/libraries/Encrypt.php b/system/libraries/Encrypt.php
index abc7694..537b1ab 100644
--- a/system/libraries/Encrypt.php
+++ b/system/libraries/Encrypt.php
@@ -27,6 +27,7 @@
  * @link		http://www.codeigniter.com/user_guide/libraries/encryption.html
  */
 class CI_Encrypt {
+	var $encryption_key	= '';
 	var $_hash_type	= 'sha1';
 	var $_mcrypt_exists = FALSE;
 	var $_mcrypt_cipher;
@@ -43,7 +44,6 @@
 		$this->_mcrypt_exists = ( ! function_exists('mcrypt_encrypt')) ? FALSE : TRUE;
 		log_message('debug', "Encrypt Class Initialized");
 	}
-  	// END CI_Encrypt()
   	
 	// --------------------------------------------------------------------
 
@@ -61,6 +61,11 @@
 	{
 		if ($key == '')
 		{	
+			if ($this->encryption_key != '')
+			{
+				return $this->encryption_key;
+			}
+		
 			$obj =& get_instance();
 			$key = $obj->config->item('encryption_key');
 
@@ -72,7 +77,20 @@
 		
 		return md5($key);
 	}
-  	// END get_key()
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Set the encryption key
+	 *
+	 * @access	public
+	 * @param	string
+	 * @return	void
+	 */
+	function set_key($key = '')
+	{
+		$this->encryption_key = $key;
+	}
   	
 	// --------------------------------------------------------------------
 
@@ -103,7 +121,6 @@
 		}
 		return base64_encode($enc);		
 	}
-  	// END encode()
   	
 	// --------------------------------------------------------------------
 
@@ -134,7 +151,6 @@
 		
 		return $this->_xor_decode($dec, $key);
 	}
-  	// END decode()
   	
 	// --------------------------------------------------------------------
 
@@ -167,7 +183,6 @@
 				
 		return $this->_xor_merge($enc, $key);
 	}
-  	// END _xor_encode()
   	
 	// --------------------------------------------------------------------
 
@@ -194,7 +209,6 @@
 	
 		return $dec;
 	}
-  	// END _xor_decode()
   	
 	// --------------------------------------------------------------------
 
@@ -219,7 +233,6 @@
 		
 		return $str;
 	}
-  	// END _xor_merge()
   	
 	// --------------------------------------------------------------------
 
@@ -238,7 +251,6 @@
 		$init_vect = mcrypt_create_iv($init_size, MCRYPT_RAND);
 		return mcrypt_encrypt($this->_mcrypt_cipher, $key, $data, $this->_mcrypt_mode, $init_vect);
 	}
-  	// END mcrypt_encode()
   	
 	// --------------------------------------------------------------------
 
@@ -257,7 +269,6 @@
 		$init_vect = mcrypt_create_iv($init_size, MCRYPT_RAND);
 		return rtrim(mcrypt_decrypt($this->_mcrypt_cipher, $key, $data, $this->_mcrypt_mode, $init_vect), "\0");
 	}
-  	// END mcrypt_decode()
   	
 	// --------------------------------------------------------------------
 
@@ -272,7 +283,6 @@
 	{
 		$this->_mcrypt_cipher = $cypher;
 	}
-  	// END set_cypher()
   	
 	// --------------------------------------------------------------------
 
@@ -287,7 +297,6 @@
 	{
 		$this->_mcrypt_mode = $mode;
 	}
-  	// END set_mode()
   	
 	// --------------------------------------------------------------------
 
@@ -309,7 +318,6 @@
 			$this->_mcrypt_mode = MCRYPT_MODE_ECB;
 		}
 	}
-  	// END _get_mcrypt()
   	
 	// --------------------------------------------------------------------
 
@@ -324,7 +332,6 @@
 	{
 		$this->_hash_type = ($type != 'sha1' AND $type != 'md5') ? 'sha1' : $type;
 	}
-  	// END set_hash()
   	
 	// --------------------------------------------------------------------
 
@@ -339,7 +346,6 @@
 	{
 		return ($this->_hash_type == 'sha1') ? $this->sha1($str) : md5($str);
 	}
-  	// END hash()
   	
 	// --------------------------------------------------------------------
 
@@ -370,7 +376,6 @@
 			return sha1($str);
 		}	
 	}  
-	// END sha1()
 	
 }
 
diff --git a/system/libraries/Loader.php b/system/libraries/Loader.php
index fff9e78..2534e69 100644
--- a/system/libraries/Loader.php
+++ b/system/libraries/Loader.php
@@ -135,20 +135,6 @@
 		$obj =& get_instance();
 		$obj->_ci_init_dbextra('dbutil');
 	}
-	
-	// --------------------------------------------------------------------
-	
-	/**
-	 * Database Export Loader
-	 *
-	 * @access	public
-	 * @return	object
-	 */	
-	function dbexport()
-	{
-		$obj =& get_instance();
-		$obj->_ci_init_dbextra('dbexport');
-	}
 
 	// --------------------------------------------------------------------
 	
